package org.dreamwork.cai.annotation;

import java.lang.annotation.*;

@Target ({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention (RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ARemoteService {
    /**
     * 远程服务的名称, 默认为拥有该注解的类的全限定类名
     * @return 远程服务名称
     */
    String endpoint () default  "";

    /**
     * 实现类的类型.
     *
     * 如果该注解用于标识一个接口，则必须设置该属性，表示真正的实现。实现类和接口本身并不一定具有显式的实现关系，
     * 唯一的要求是实现类必须覆盖接口中所有未被标识为 @ITransient 的公有方法
     * @return 实现类的类型
     */
    String realization () default "";

    /**
     * 服务的接口类型.
     *
     * 若该注解用于标识一个类，且该属性被设置了，则要求类必须显式实现该属性所指定的接口。
     *
     * 该属性可以设置，则服务类型为类本身
     * @return 服务的接口类型
     */
    String interfaceClass () default "";

    /**
     * 用于描述远程接口
     * @return 描述
     */
    String description () default "";

    /**
     * 指定导出远程服务的接口类型。
     * <p>如果被标注的目标仅实现了一个接口，可不指定</p>
     * @return 远程目标的接口类型
     */
    Class<?>[] types() default {};
}
